package com.elitel.frame.main.dao.ext;

import com.elitel.frame.main.entity.BaseQueryfield;
import com.elitel.frame.main.entity.SysPrjservice;
import com.elitel.frame.main.entity.ext.BaseQueryfieldExt;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author guoyanfei
 * @description 扩展查询字段Mapper
 */
public interface ExtBaseQueryfieldMapper {

    /**
     * @param beginPage(开始条数),endPage(结束条数),serviceId(服务ID),serviceType(服务类型)
     * @return BaseQueryfield集合
     * @Description 分页显示查询字段
     * @author guoyanfei
     */
    List<BaseQueryfield> getAllList(
            Integer beginPage, Integer endPage, String serviceId, Integer serviceType);

    /**
     * @param serviceId(服务ID),serviceType(服务类型)
     * @return 总记录数
     * @Description 查询总记录数
     * @author guoyanfei
     */
    Integer getListCount(
            @Param("serviceId") String serviceId, @Param("serviceType") Integer serviceType);

    /**
     * @Description 批量删除数据
     * @author guoyanfei
     */
    Integer deleteBatchByguid(List<String> guids);

    /**
     * @param serviceId(服务ID)
     * @param serviceType(服务类型)
     * @return BaseQueryfield集合
     * @description 通过服务ID和服务类型
     * @author guoyanfei
     */
    List<BaseQueryfield> getBaseQueryfieldbyServiceId(
            @Param("serviceId") String serviceId, @Param("serviceType") Integer serviceType);

    /**
     * show 通过服务ID删除其查询字段信息
     *
     * @param serviceId(服务ID)
     * @return 删除条数
     * @author guoyanfei
     * @date 2017/11/08
     */
    Integer deleteQueryfieldByServiceId(String serviceId);

    /**
     * show 查询服务数据表查询字段信息
     *
     * @param serviceId(服务ID)
     * @param serviceType(服务类型)
     * @param grade(资源树服务层级)
     * @param paramType(参数类型)
     * @return BaseQueryfieldExt实体
     * @author guoyanfei
     * @date 2017/11/16
     */
    List<BaseQueryfieldExt> getBaseQueryfieldtoTableList(
            @Param("serviceId") String serviceId,
            @Param("serviceType") Integer serviceType,
            @Param("grade") String grade,
            @Param("paramType") Integer paramType);

    /**
     * show 查询服务数据表查询字段信息(Mysql数据库)
     *
     * @param serviceId(服务ID)
     * @param serviceType(服务类型)
     * @param grade(资源树服务层级)
     * @param paramType(参数类型)
     * @return BaseQueryfieldExt实体
     * @author guoyanfei
     * @date 2017/11/16
     */
    List<BaseQueryfieldExt> getBaseQueryfieldtoTableListMysql(
            @Param("serviceId") String serviceId,
            @Param("serviceType") Integer serviceType,
            @Param("grade") String grade,
            @Param("paramType") Integer paramType);

    /**
     * show 查询服务视图查询字段信息
     *
     * @param serviceId(服务ID)
     * @param serviceType(服务类型)
     * @param paramType(参数类型)
     * @return BaseQueryfieldExt实体
     * @author guoyanfei
     * @date 2017/11/16
     */
    List<BaseQueryfieldExt> getBaseQueryfieldtoViewList(
            @Param("serviceId") String serviceId,
            @Param("serviceType") Integer serviceType,
            @Param("grade") String grade,
            @Param("paramType") Integer paramType);

    /**
     * show 查询服务视图查询字段信息(Mysql数据库)
     *
     * @param serviceId(服务ID)
     * @param serviceType(服务类型)
     * @param paramType(参数类型)
     * @return BaseQueryfieldExt实体
     * @author guoyanfei
     * @date 2017/11/16
     */
    List<BaseQueryfieldExt> getBaseQueryfieldtoViewListMysql(
            @Param("serviceId") String serviceId,
            @Param("serviceType") Integer serviceType,
            @Param("grade") String grade,
            @Param("paramType") Integer paramType);

    /**
     * 根据服务id获取集合
     *
     * @param serviceID
     * @return
     */
    List<BaseQueryfield> selectAllField(String serviceID);
    List<BaseQueryfield> selectAllFieldWithServiceCode(String serviceID);

    int deleteQueryfield(Map<String, Object> map);

    /**
     * 根據服务id获取basequeryfiled集合 并排序
     *
     * @return
     */
    List<BaseQueryfield> selectQueryFiled(String serviceId);

    /**
     * <pre>getQueryFieldByParamCode(根据数据服务编码和参数编码获取参数字段)
     * @author：FanWenquan
     * @date：2018年2月27日 下午2:11:13
     * @param dataservercode
     * @param parmetercode
     * @return</pre>
     */
    BaseQueryfieldExt getQueryFieldByParamCode(
            @Param("dataservercode") String dataservercode, @Param("parmetercode") String parmetercode);

    /**
     * show 查询字段最大的排序序号(Oracle数据库) created by guoyanfei on 2018/04/02
     *
     * @param serviceId   服务ID
     * @param serviceType 服务类型
     * @param paramType   参数类型
     * @param grade       分层等级(资源树服务使用)
     * @return 最大排序序号
     */
    Integer selectMaxShowOrderOracle(
            @Param("serviceId") String serviceId,
            @Param("serviceType") Integer serviceType,
            @Param("paramType") Integer paramType,
            @Param("grade") String grade);

    /**
     * show 查询字段最大的排序序号(Mysql数据库) created by guoyanfei on 2018/04/02
     *
     * @param serviceId   服务ID
     * @param serviceType 服务类型
     * @param paramType   参数类型
     * @param grade       分层等级(资源树服务使用)
     * @return 最大排序序号
     */
    Integer selectMaxShowOrderMysql(
            @Param("serviceId") String serviceId,
            @Param("serviceType") Integer serviceType,
            @Param("paramType") Integer paramType,
            @Param("grade") String grade);

    /**
     * 根据主键查详细信息
     *
     * @param guid
     * @return
     */
    SysPrjservice getServiceByFieldGuid(String guid);

    /**
     * 根据服务ID和参数编码查询条件字段
     *
     * @param serviceid
     * @param parametercode
     * @return
     */
    BaseQueryfield getBaseQueryFieldByServiceIdParmeterCode(
            @Param("serviceid") String serviceid, @Param("parametercode") String parametercode);

    /**
     * TODO: 批量添加查询字段
     *
     * @param baseQueryfields
     * @return
     */
    Integer batchInsertBaseQueryField(@Param("baseQueryfields") List<BaseQueryfield> baseQueryfields);

    Integer batchInsertBaseQueryFieldSqlite(@Param("baseQueryfields") List<BaseQueryfield> baseQueryfields);

    /**
     * 根据服务ID和参数编码查询条件字段
     *
     * @param serviceid
     * @return
     */
    List<BaseQueryfield> selectByServiceCode(String serviceid);
}
